package Vista;

import java.awt.BorderLayout;
import java.awt.Dialog;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.Toolkit;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.border.EmptyBorder;

import oracle.jdbc.driver.Message;

import Controlador.Controlador;

import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

/*La clase principal de la vista, es una clase que contiene todas las ventanas de 
la aplicacion, la ventana de login, la del cliente y la del administrador. Esta controla 
la apertura y cierrre de todas las ventanas.
*/
public class Frame_Principal extends JFrame {

	// ATRIBUTOS
	private JPanel contentPane;
	private Panel_Login panelLogin;
	private Panel_ModoCliente panelModoCliente;
	private Controlador control;
	
	String nombreAplic;
	String titulo;


	/**
	 * Create the frame.
	 */
	public Frame_Principal(Controlador control) {
		//Titulo para la ventana principal
		nombreAplic = "Concesionario";
		setTitle(nombreAplic);
		
		//Look&Feel del Sistema Operativo
//		try {
//			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
//		} catch (Exception e) {
//			e.printStackTrace();
//		}
		
		//Icono de la aplicacion
		this.setIconImage (new ImageIcon("images/logo.png").getImage());
		
		panelLogin = new Panel_Login(control);
		panelModoCliente = new Panel_ModoCliente(control);
		this.control = control;
				
		setPreferredSize(new Dimension(1000, 800));
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 950, 750);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		
		this.cargarPanelLogin();
		this.setVisible(true);
		
		// Llamar oyentes
		panelLogin.getBotonSalir().addActionListener(new oyentePanelLogin());
		panelLogin.getBotonAcceder().addActionListener(new oyentePanelLogin());
		panelModoCliente.getBotonSalir().addActionListener(new oyentePanelModoCliente());
		
	}
	
	/**
	 * Metodo para resetear los campos de 'DNI' y 'Contraseña'
	 * cuando se produce un error.
	 */
	public void resetearCamposLogin(){
		panelLogin.getCampoDni().setText("");
		panelLogin.getCampoPass().setText("");
	}
	
	/**
	 * Este metodo comprueba si la contraseña es correcta.
	 * Como no hay un campo contraseña en la BD hacemos este control obligando al usuario
	 * a introducir una contraseña igual al DNI.
	 * @return
	 */
	public boolean passCorrecto(){
		String pass;
		if(panelLogin.getCampoDni().getText().length() == panelLogin.getCampoPass().getPassword().length){
			for(int i=0; i<panelLogin.getCampoPass().getPassword().length; i++){
				if(panelLogin.getCampoPass().getPassword()[i] != panelLogin.getCampoDni().getText().charAt(i)){
					return false;
				}
			}
			return true;
		}else{
			return false;
		}
	}
	
	/**
	 * Metodos para cargar paneles
	 */
	public void cargarPanelLogin(){
		setTitle(nombreAplic);
		contentPane.removeAll();
		resetearCamposLogin();
		contentPane.setLayout(new BorderLayout(0, 0));
		contentPane.add(panelLogin, BorderLayout.NORTH);
		contentPane.setVisible(true);
		panelLogin.setVisible(true);
		contentPane.updateUI();
	}

	public void cargarPanelMCliente(){
		contentPane.removeAll();
		contentPane.add(panelModoCliente);
		String nombre=control.dimeNombreCliente(panelLogin.getCampoDni().getText());
		titulo=nombreAplic+" - Cliente "+nombre;
		setTitle(titulo);
		panelModoCliente.setNombreCliente(nombre);
		contentPane.setVisible(true);
		panelModoCliente.setVisible(true);
		contentPane.updateUI();
	}
	

	
	class oyentePanelLogin implements ActionListener {
		public void actionPerformed(ActionEvent evento) {
			if(evento.getActionCommand().equalsIgnoreCase("salir")){
				System.exit(0);
			}else if(evento.getActionCommand().equalsIgnoreCase("acceder")){
				if(panelLogin.getCampoDni().getText().equalsIgnoreCase("") || panelLogin.getCampoPass().getPassword().length==0){
					System.err.println("Debe introducir usuario y contraseña /!\\");
					JOptionPane.showMessageDialog(null, "Debe introducir un usuario y contraseña.", "Advertencia", JOptionPane.WARNING_MESSAGE);
					resetearCamposLogin();
				}else{
					if(panelLogin.getComboTipoUsu().getSelectedItem().toString().equalsIgnoreCase("cliente")){
						if (control.esCliente(panelLogin.getCampoDni().getText()) && passCorrecto()){
							cargarPanelMCliente();
						}else{
							System.err.println("Usuario o contraseña incorrecto /!\\");
							JOptionPane.showMessageDialog(null, "Usuario o contraseña incorrecto.", "Error", JOptionPane.ERROR_MESSAGE);
							resetearCamposLogin();
						}
					}
				}
			}
		}
	}
	
	class oyentePanelModoCliente implements ActionListener {
		public void actionPerformed(ActionEvent evento) {
			if(evento.getActionCommand().equalsIgnoreCase("salir")){
				cargarPanelLogin();
			}else if(evento.getActionCommand().equalsIgnoreCase("ayuda")){
				System.out.println("Hola");
			}
		}
	}
	
}
